This invention relates generally to calculators and improvements therein and more particularly to programmable calculators that may be controlled both manually from the keyboard input unit and automatically by a stored program loaded into the calculator from the keyboard input unit or an external record member.
Computational problems may be solved manually, with the aid of a calculator (a dedicated computational keyboard-driven machine that may be either programmable or nonprogrammable), or a general purpose computer. Manual solution of computational problems is often very slow, so slow in many cases as to be an impractical, expensive, and ineffective use of the human resource, particularly when there are other alternatives for solution of the computational problems.
Nonprogrammable calculators may be employed to solve many relatively simple computational problems more efficiently than they could be solved by manual methods. However, the keyboard operations or language employed by these calculators is typically trivial in structure, thereby requiring many keyboard operations to solve more general arithmetic problems. Programmable calculators may be employed to solve many additional computational problems at rates hundreds of times faster than manual methods. However, the keyboard language employed by these caculators is also typically relatively simple in structure, thereby again requiring many keyboard operations to solve more general arithmetic problems.
Another basic problem with nearly all of the keyboard languages employed by conventional programmable and nonprogrammable calculators is that they allow the characteristics of the hardware of the calculator to show through to the user. Thus, the user must generally work with data movement at the hardware level, for example, by making sure that data is in certain storage registers before specifying the operations to be performed with that data and by performing other such "housekeeping" functions. In addition, these languages have been unique to a particular calculator and have not been generally familiar to those persons skilled in the computer and calculator arts.
In the past both programmable and nonprogrammable calculators have generally had very limited memories, thereby severely limiting the size of the computational problems they could be employed to solve. Because of these limitations, the relatively simple structure of the keyboard languages employed by these calculators and the "housekeeping" requirements associated with their languages have not heretofore been serious shortcomings. However, with advances in technology, the cost of memories has decreased to a point where larger memories could be economically included in programmable calculators. These larger memories have allowed larger and more sophisticated problems to be handled by programmable calculators. As a result the shortcomings of conventional calculator languages have become more critical, thereby creating the need for higher level keyboard languages.
In addition to the foregoing shortcomings, conventional programmable calculators generally have less capability and flexibility than is required to meet the needs of many users. For example, they typically cannot be readily expanded and adapted by the user to increase the amount of program and data storage memory or to perform many special keyboard functions oriented toward the environment of the user.
In some conventional programmable calculators a program stored within the calculator can be recorded onto an external magnetic record member and can later be reloaded back into the calculator from the magnetic record member. However, data and programs stored within these calculators typically cannot be separately recorded onto an external magnetic record member and later separatedly reloaded back into the calculator therefrom. Moreover, these calculators typically have no provision for making a program secure when it is recorded onto an external magnetic record member. Any user may therefore re-record the program or obtain an indication of the individual program steps once the program is reloaded into the calculator.
Conventional programmable calculators with self-contained output display units typically have little or no alpha capability and typically can only display the contents of one or more selected registers. They are therefore typically unable to display a line containing an alphanumeric statement or an alphabetic message such as might be used, for example, to inform the user how to run programs with which he may be unfamiliar. Such features would be very helpful to the user both in editing programs and in simplifying their use.
Conventional programmable calculators typically have little or no capability for editing keyboard entries or programs stored within the calculator. For example, they typically have no provision for deleting, replacing, and inserting information included in or omitted from a keyboard entry or internally-stored program on a character-by-character or line-by-line basis. As another example, they typically have no provision for directly recalling any line of an internally-stored program. As a further example, they typically have no provision for automatically accommodating and sequencing program statements which are entered by the user in random order. Such features would be very helpful to the user in editing programs.
Conventional computers typically pose an interfacing problem between the user and the machine. This interface requirement takes the form of a machine-level operator with special abilities for maintaining the software system in operative condition for the user. Computer time sharing systems comprising a centrally located computer and a multiplicity of remotely located user terminals connected thereto by telephone lines have partially solved the user/machine interface problem. However, these systems lack the same flexibility as conventional computers in that they are only programmable and provide no convenient non-programmable method for performing relatively simple calculations. Both types of systems lack provision for editing a program statement from a keyboard without the necessity of retyping the entire statement.